package dao;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Calendar;
import java.util.NoSuchElementException;
import java.util.Scanner;

import controller.BolaoFacade;



import bean.Jogo;
import bean.Rodada;

import util.StatusJogo;
import util.Utils;

public class CarregaJogos {

	//construtor
	private CarregaJogos() {
	}

	//metodos
	/**
	 * Ler os resultados em arquivo txt e atualiza os placares
	 * @param nomeArquivo
	 *    txt a ser lido
	 * @param rodada
	 *    rodada a ser atualizada os resultados
	 */
	public static void lerResultados(File fileName, Rodada rodada) throws Exception {
		Scanner input = openFile( fileName );

		while (input.hasNext()) {
			String[] linha = input.nextLine().split(";", 6);

			String timeA = linha[2];
			String timeB = linha[5];
			int golsA = Integer.parseInt(linha[3]);
			int golsB = Integer.parseInt(linha[4]);

			for (Jogo jogo : rodada.getJogos()) {
				if (jogo.getTimeA().equals(timeA) && jogo.getTimeB().equals(timeB)) {
					jogo.setGolsA(golsA);
					jogo.setGolsB(golsB);
					
					jogo.setStatusDoJogo(StatusJogo.FECHADO_COM_RESULTADO);
				}
			}
		}

		input.close();
		
	}


	/**
	 * Ler os arquivos que contem os jogos e cria uma rodada com os jogos
	 * @param fileName
	 * 		nome do arquivo a ser lido
	 * @param bolaoFacade
	 * 		Bolao "em uso"
	 * @param rodada
	 * 		Rodada a ser criada
	 */
	public static void processaArquivoDeJogos(File fileName, BolaoFacade bolaoFacade, Rodada rodada) {
		lerJogos(fileName, rodada);
		bolaoFacade.adicionaRodada(rodada);
	}

	/**
	 * Ler os jogos em arquivo txt e atualiza os jogos
	 * @param fileName
	 * 		nome do arquivo a ser lido
	 * @param rodada
	 * 		Rodada a ser adicionado o jogo
	 */
	private static void lerJogos(File fileName, Rodada rodada) {
		String time1, time2;
		Calendar horario;
		
		Scanner input = openFile( fileName );
		try {
			while (input.hasNext()) {
				String[] linha = input.nextLine().split(";", 4);
				time1 = linha[2];
				time2 = linha[3];
				horario = Utils.criaCalendar(linha[0], linha[1]);

				rodada.adicionaJogo(new Jogo(time1, time2, horario));
			}
		} catch (IllegalArgumentException argumentException) {
			System.err.println("Argumento de Jogo errado.");
			input.close();
			System.exit(1);
		} catch (NoSuchElementException elementException) {
			System.err.println("Arquivo em formato inapropiado.");
			input.close();
			System.exit(1);
		} catch (IllegalStateException stateException) {
			System.err.println("Erro em ler o arquivo.");
			input.close();
			System.exit(1);
		} finally {
			input.close();
		}
	}

	/**
	 * Abre o Arquivo
	 * @param nomeArquivo
	 * 		Arquivo a ser aberto
	 * @return 
	 * 		Arquivo aberto
	 */
	private static Scanner openFile(File fileName) {
		Scanner input = null;
		try {
			input = new Scanner( fileName );
		} catch (FileNotFoundException fileNotFoundException) {
			System.err.println("Arquivo nao encontrado.");
			System.exit(1);
		}
		return input;
	}
}